home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 4
/
FM Towns Free Software Collection 4 - Disc 1.iso
/
pao
/
towns
/
cdplay
/
src
/
cdpndisp.c
< prev
next >
Wrap
Text File
|
1991-10-18
|
64KB
|
1,957 lines
/* << High C V1.4 >> **********************************************************
**
** CD 演奏ライブラリを使用した CD PLAYER 用表示ルーチン
**
** 1991.03.19 : CREATE
** 1991.03.23 : FINISH
**
** < HISTORY >
** 1991.03.19 : CREATE
**
** < note > : TABS = 4
**
** All Rights Reserved, Copyright (C) Y.Hirata 1991.
**
** Programmed by Y.Hirata ( Nifty ID : NAB03321 )
**
******************************************************************************/
#include <stdio.h>
#include <string.h>
#include <egb.h>
#include <mos.h>
#include "grp.h"
#include "cdpn.h"
#include "switch.h"
#include "word.h"
#include "elevol.h"
#include "tape.h"
#define PROGRAM_NAME "パオパオ CD PLAYER v0.86"
#define COPYRIGHT_NAME "Copyright (C) Y.Hirata 1991."
/*-----------------------------------------------------------------------------
** ここでは、マウスの制御をしていません.
** ☆呼出し側で必要に応じてマウスのOFF/ONをする必要があります.
**
** paintMode / writeMode / Color は、表示する前にかならず指定して下さい.
** ここでは、変更したままで リターン します.
-----------------------------------------------------------------------------*/
char Flg_disptoc = FALSE ; /* 曲情報が表示済か? */
/******************************* マウス 表示制御 ******************************/
void dispmouse( int sw )
/*=============================================================================
** マウスカーソル の表示を ON/OFF する.
**
** < INPUT > : 表示スイッチ ( 真:表示 , 偽:非表示 )
** < OUTPUT > : なし
** < RETURN > : なし
=============================================================================*/
{
if ( Flg.mouse == sw ) return ;
MOS_disp( sw ) ;
if ( sw ) Flg.mouse = TRUE ;
else Flg.mouse = FALSE ;
}
/**************************** メッセージ表示領域クリア ****************************/
void dispmsgclear( void )
/*=============================================================================
** 画面下 2段のメッセージ領域を クリア する.
**
** < INPUT > : なし
** < OUTPUT > : なし
** < RETURN > : なし
=============================================================================*/
{
EGB_color( Gwork,2,COLOR_SCREEN_BACK ) ; /* 面塗り色 */
EGB_paintMode( Gwork,0x20 ) ;
EGB_writeMode( Gwork,PSET ) ;
box( Gwork,PSMsg.x,PSMsg.y,PSMsg.x+SZMsg.x-1,PSMsg.y+SZMsg.y-1 ) ;
}
/******************************* メッセージ表示 ********************************/
void disperrormsg( int errno )
/*=============================================================================
** メッセージIDに対応したメッセージを表示する.
**
** < INPUT > : エラー値
** < OUTPUT > : なし
** < RETURN > : なし
=============================================================================*/
{
char *CDDA_ERR_msg[] = {
"正常終了.", /* 000(0x000) */
"CDがセットされていません.", /* 001(0x001) */
"パラメタに誤りがあります.", /* 002(0x002) */
"CDドライブが接続されていません.", /* 004(0x004) */
"コマンドが異常終了しました.", /* 008(0x008) */
"メディアエラー.", /* 016(0x010) */
"ハードエラー.", /* 032(0x020) */
"パリティエラー.", /* 064(0x040) */
"メディアが交換されてます.", /* 128(0x080) */
"デバイス番号に誤りがあります.", /* 256(0x100) */
"セクタ長が違います.", /* 257(0x101) */
"音楽演奏中です.", /* 258(0x102) */
"一時停止中です.", /* 260(0x104) */
"一時停止状態ではありません.", /* 264(0x108) */
"音楽データがありません.", /* 272(0x110) */
"繰り返し演奏を開始しました.", /* 288(0x120) */
"該当メッセージなし." /* ---(0x---) */
} ;
char *CDDA_STATUS_msg[] = {
"CDがセットされていません.",
"停止中です.",
"演奏中です.",
"一時停止中です."
} ;
int c, chk, no ;
int nomsg = 16 ;
if ( !CDDA_DEBUG ) return ;
chk = 0x0001 ;
no = 0 ;
for ( c=0; c<8; c++ ) {
if ( ((errno & 0x00ff) & chk) == chk ) no = c + 1 ;
chk <<= 1 ;
}
if ( errno > 255 ) no += 9 ;
if ( errno != 0 && no == 0 ) no = nomsg ;
if ( no < 0 || no > nomsg ) no = nomsg ;
sprintf( Textbuf,"ERROR(%04xh): %s",errno,CDDA_ERR_msg[no] ) ;
EGB_color( Gwork,0,COLOR_ERROR ) ;
EGB_color( Gwork,1,COLOR_SCREEN_BACK ) ;
EGB_paintMode( Gwork,0x02 ) ;
EGB_writeMode( Gwork,OPAQUE ) ;
disptext( Gwork,PSMsg.x,PSMsg.y+19+YCDOT-1,Textbuf ) ; /* メッセージ2段目 */
#if 0
no = CDDA_NOW_status ;
if ( no < 0 ) {
no = 0 ;
} else {
no ++ ;
}
sprintf( Textbuf,"Now status(%d): %s",
CDDA_NOW_status,CDDA_STATUS_msg[no] ) ;
EGB_color( Gwork,0,COLOR_WARNING ) ;
disptext( Gwork,PSMsg.x,PSMsg.y+19+YCDOT-1,Textbuf ) ; /* メッセージ2段目 */
#endif
}
/********************************* タイトル表示 ********************************/
void disptitle( void )
/*=============================================================================
** プログラム名/COPYRIGHT 表示をする.
**
** < INPUT > : なし
** < OUTPUT > : なし
** < RETURN > : なし
=============================================================================*/
{
char title[80] ;
int c ;
EGB_paintMode( Gwork,0x02 ) ;
EGB_writeMode( Gwork,PSET ) ;
EGB_fontStyle( Gwork,0x0004 ) ; /* 影付文字 */
/* ↓↓ ★★ DEBUG ★★ ↓↓ */
if ( CDDA_DEBUG ) {
EGB_color( Gwork,0,C_REDON ) ; /* 前景色 */
EGB_color( Gwork,1,C_REDOFF ) ; /* 背景色 */
} else {
/* ↑↑ ★★ DEBUG ★★ ↑↑ */
EGB_color( Gwork,0,COLOR_TITLE ) ; /* 前景色 */
EGB_color( Gwork,1,COLOR_TITLE_BACK ) ; /* 背景色 */
}
strcpy( title,PROGRAM_NAME ) ;
/* ↓↓ ★★ DEBUG ★★ ↓↓ */
if ( CDDA_DEBUG ) {
strcat( title," << DEBUG MODE >>" ) ;
}
/* ↑↑ ★★ DEBUG ★★ ↑↑ */
disptext( Gwork,PSTitle.x,PSTitle.y+YCDOT-1,title ) ;
strcpy( title,COPYRIGHT_NAME ) ;
c = ( 80 - strlen( title ) - 1 ) * XCDOT - 1 ;
if ( c < ZERO ) c = ZERO ;
disptext( Gwork,c,PSTitle.y+YCDOT-1,title ) ;
/*-----------------------------------------------------------------------------
** 字体は、標準であることを前提としているために、変更後必ず標準体に戻す.
-----------------------------------------------------------------------------*/
EGB_fontStyle( Gwork,0x0000 ) ; /* 通常文字 */
}
/***************************** EXITボタン描画 ********************************/
void dispexit( int sw )
/*=============================================================================
** EXIT ボタン を表示する.
**
** < INPUT > : スイッチ ON/OFF 状態.
** < OUTPUT > : なし
** < RETURN > : なし
=============================================================================*/
{
unsigned int p ;
if ( sw ) {
if ( Swstat[SW_EXIT] ) return ;
Swstat[SW_EXIT] = TRUE ;
} else {
if ( !Swstat[SW_EXIT] ) return ;
Swstat[SW_EXIT] = FALSE ;
}
if ( sw ) { /* スイッチ ON */
p = (unsigned int)DATA_exit ;
} else { /* スイッチ OFF */
p = (unsigned int)DATA_exit ;
}
EGB_paintMode( Gwork,0x02 ) ; /* 境界 */
EGB_writeMode( Gwork,PSET ) ;
put( Gwork,Position[SW_EXIT].s.x,Position[SW_EXIT].s.y,
Position[SW_EXIT].e.x,Position[SW_EXIT].e.y,p,4 ) ;
}
/**************************** プログラムTIME表示 ******************************/
void dispprogramtime( void )
/*=============================================================================
** プログラム設定された曲の合計時間とプログラム設定されていない曲の合計時間を表示
** する.
**
** < INPUT > : なし
** < OUTPUT > : なし
** < RETURN > : なし
=============================================================================*/
{
int xs ;
if ( Playmode != SW_PROGRAM ) return ;
EGB_color( Gwork,0,COLOR_INFO_ON ) ; /* 前景色 */
EGB_color( Gwork,1,COLOR_INFO_BACK ) ; /* 背景色 */
EGB_paintMode( Gwork,0x02 ) ; /* 境界 */
EGB_writeMode( Gwork,OPAQUE ) ;
sprintf( Textbuf," A %2d分%02d秒%02d ",
CDDA_TIME_program.min,CDDA_TIME_program.sec,CDDA_TIME_program.frame
) ;
xs = PSInf.x + 1 ;
/* メッセージ 1段目 */
disptext( Gwork,xs,PSMsg.y+2+YCDOT-1,Textbuf ) ;
EGB_color( Gwork,0,COLOR_INFO_OFF ) ; /* 前景色 */
sprintf( Textbuf," B %2d分%02d秒%02d ",
CDDA_TIME_program2.min,CDDA_TIME_program2.sec,CDDA_TIME_program2.frame
) ;
xs = PSInf.x + 1 + 121 ;
/* メッセージ 1段目 */
disptext( Gwork,xs,PSMsg.y+2+YCDOT-1,Textbuf ) ;
if ( !Flg.tape ) return ;
xs = PSInf.x + 1 + 121 * 2 ;
WORD_put9p( Gwork,xs+XCDOT+XCDOT,PSMsg.y+2,
COLOR_INFO_TAPE,COLOR_SCREEN_BACK,"TAPE" ) ;
EGB_color( Gwork,0,COLOR_INFO_ON ) ; /* 前景色 */
EGB_color( Gwork,1,COLOR_INFO_BACK ) ; /* 背景色 */
EGB_paintMode( Gwork,0x02 ) ; /* 境界 */
EGB_writeMode( Gwork,OPAQUE ) ;
if ( Tapetime > ZERO ) {
sprintf( Textbuf,"%3d",Tapetime ) ;
} else {
sprintf( Textbuf,"***" ) ;
}
/* メッセージ 1段目 */
disptext( Gwork,xs+6*XCDOT,PSMsg.y+2+YCDOT-1,Textbuf ) ;
}
/*************************** 時間表示時のマウス制御 ***************************/
int disptimemouse( int sw )
/*=============================================================================
** 時間表示の際のマウス ON/OFF をする.
**
** < INPUT > : sw が 真 ならば、マウス 表示 , 偽 ならば マウス 非表示.
** < OUTPUT > : なし
** < RETURN > : マウス 制御をしたならば、真値 , なにもしなければ 偽値.
=============================================================================*/
{
if ( Position[SW_TIME].s.x-16 < Mosx && Mosx < Position[SW_TIME].e.x &&
Position[SW_TIME].s.y-16 < Mosy && Mosy < Position[SW_TIME].e.y ) {
dispmouse( sw ) ;
return( TRUE ) ;
}
return( FALSE ) ;
}
/**************************** TIME 情報 表示 *******************************/
void disptimeinfo( void )
/*=============================================================================
** 時間表示情報を描画する.
**
** < INPUT > : なし
** < OUTPUT > : なし
** < RETURN > : なし
=============================================================================*/
{
switch ( Timemode ) {
case TM_TR_CLOCK :
case TM_TR_TIME :
WORD_put7p( Gwork,Position[SW_TIME].s.x+3*XCDOT,
Position[SW_TIME].s.y+27,COLOR_TIME_INFO,COLOR_TIME_BACK,
"TIME " ) ;
break ;
case TM_DISC_CLOCK :
case TM_DISC_TIME :
WORD_put7p( Gwork,Position[SW_TIME].s.x+3*XCDOT,
Position[SW_TIME].s.y+27,COLOR_TIME_INFO,COLOR_TIME_BACK,
"TOTAL" ) ;
}
Dispmode = Timemode ;
}
/*********************** TIME BOX プログラムモード時の表示 **********************/
void disptimeprgsw( void )
/*=============================================================================
** 時間表示枠内のプログラムモード用マークのON/OFF表示する.
**
** < INPUT > : なし
** < OUTPUT > : なし
** < RETURN > : なし
=============================================================================*/
{
int mosflg ;
mosflg = disptimemouse( FALSE ) ;
EGB_writeMode( Gwork,PSET ) ;
if ( Playmode == SW_PROGRAM ) {
EGB_paintMode( Gwork,0x02 ) ; /* 境界 */
EGB_color( Gwork,0,COLOR_TIME_PROG ) ; /* 前景色 */
put( Gwork,Position[SW_TIME].s.x+16*XCDOT,Position[SW_TIME].s.y+3,
Position[SW_TIME].s.x+19*XCDOT-1,Position[SW_TIME].s.y+3+6,
(unsigned int)WORD_program,1 ) ;
} else {
EGB_paintMode( Gwork,0x20 ) ; /* 面塗り */
EGB_color( Gwork,2,COLOR_TIME_BACK ) ; /* 面塗り色 */
box( Gwork,Position[SW_TIME].s.x+16*XCDOT,Position[SW_TIME].s.y+3,
Position[SW_TIME].s.x+19*XCDOT-1,Position[SW_TIME].s.y+3+6 ) ;
box( Gwork,Position[SW_TIME].s.x+16*XCDOT,Position[SW_TIME].s.y+13,
Position[SW_TIME].s.x+19*XCDOT-1,
Position[SW_TIME].s.y+13+YCDOT-1 ) ;
/*-----------------------------------------------------------------------------
** Flg.prgchk が真値だと、時間表示されないので、FALSEにし待ち時間をクリアする.
-----------------------------------------------------------------------------*/
Flg.prgchk = FALSE ;
Tcount2 = PRG_WAIT + 1 ;
}
if ( mosflg ) disptimemouse( TRUE ) ;
}
/***************************** TIME BOX 表示 *******************************/
void disptimebox( void )
/*=============================================================================
** 時間表示用のBOXを描画する.
**
** < INPUT > : なし
** < OUTPUT > : なし
** < RETURN > : なし
=============================================================================*/
{
static char initflg = FALSE ;
/*-----------------------------------------------------------------------------
** 時間表示領域の描画
-----------------------------------------------------------------------------*/
EGB_color( Gwork,2,COLOR_TIME_BACK ) ; /* 面塗り色 */
EGB_paintMode( Gwork,0x20 ) ; /* 面塗り */
EGB_writeMode( Gwork,PSET ) ;
box( Gwork,Position[SW_TIME].s.x+1,Position[SW_TIME].s.y+1,
Position[SW_TIME].e.x-1,Position[SW_TIME].e.y-1 ) ;
if ( !initflg ) {
EGB_paintMode( Gwork,0x02 ) ; /* 境界 */
EGB_color( Gwork,0,COLOR_TIME_BOX0 ) ; /* 前景色 */
line( Gwork,Position[SW_TIME].s.x,Position[SW_TIME].e.y-1,
Position[SW_TIME].s.x,Position[SW_TIME].s.y ) ; /* 縦線 */
line( Gwork,Position[SW_TIME].s.x,Position[SW_TIME].s.y,
Position[SW_TIME].e.x,Position[SW_TIME].s.y ) ; /* 横線 */
EGB_color( Gwork,0,COLOR_TIME_BOX1 ) ; /* 前景色 */
line( Gwork,Position[SW_TIME].s.x,Position[SW_TIME].e.y,
Position[SW_TIME].e.x,Position[SW_TIME].e.y ) ; /* 横線 */
line( Gwork,Position[SW_TIME].e.x,Position[SW_TIME].e.y,
Position[SW_TIME].e.x,Position[SW_TIME].s.y+1 ) ;/* 縦線 */
initflg = TRUE ;
}
/*-----------------------------------------------------------------------------
** プログラムモードチェック表示
-----------------------------------------------------------------------------*/
disptimeprgsw() ;
/*-----------------------------------------------------------------------------
** 時間表示情報の描画
-----------------------------------------------------------------------------*/
WORD_put7p( Gwork,Position[SW_TIME].s.x+3*XCDOT,
Position[SW_TIME].s.y+7,COLOR_TIME_DISC,COLOR_TIME_BACK,
"DISC" ) ;
disptimeinfo() ;
/*-----------------------------------------------------------------------------
** 表示情報 クリア
-----------------------------------------------------------------------------*/
Dispmode = Timemode ;
Dispno = Dispmin = Dispsec = -1 ;
}
/****************************** 曲番号の表示 *******************************/
int disptimemusicno( int no )
/*=============================================================================
** 時間表示枠内に曲番号を表示する.
**
** < INPUT > : 曲番号
** < OUTPUT > : なし
** < RETURN > : 曲番号表示後に時間情報を表示する必要ありか?
** 真値 ならば、時間情報を表示する必要あり.
** 偽値 ならば、時間情報を表示する必要なし.
=============================================================================*/
{
if ( Timemode != Dispmode ) {
disptimeinfo() ;
}
EGB_color( Gwork,0,COLOR_TIME_MUSIC ) ; /* 前景色 */
EGB_color( Gwork,1,COLOR_TIME_BACK ) ; /* 背景色 */
EGB_paintMode( Gwork,0x02 ) ; /* 境界 */
EGB_writeMode( Gwork,OPAQUE ) ;
switch ( Timemode ) {
case TM_TR_CLOCK :
case TM_TR_TIME :
/*-----------------------------------------------------------------------------
** プログラム確認
-----------------------------------------------------------------------------*/
if ( Flg.prgchk ) { /* プログラム確認 */
EGB_color( Gwork,0,COLOR_TIME_PRG ) ; /* 前景色 */
if ( no ) {
sprintf( Textbuf,"%2d",CDDA_COUNT_program ) ;
if ( CDDA_COUNT_program == CDDA_REMAIN_program ) {
/* 登録してある最後の曲 */
strcat( Textbuf,"." ) ;
} else {
strcat( Textbuf," " ) ;
}
} else {
sprintf( Textbuf,"END" ) ;
}
} else {
sprintf( Textbuf," " ) ;
}
disptimemouse( FALSE ) ;
if ( Flg.prgchk && no ) {
disptext( Gwork,Position[SW_TIME].s.x+16*XCDOT,
Position[SW_TIME].s.y+13+YCDOT-1," " ) ;
WORD_put9p( Gwork,Position[SW_TIME].s.x+16*XCDOT+XCDOT9P,
Position[SW_TIME].s.y+13,
COLOR_TIME_PRG,COLOR_TIME_BACK,Textbuf ) ;
EGB_color( Gwork,0,COLOR_TIME_MUSIC ) ; /* 前景色 */
EGB_color( Gwork,1,COLOR_TIME_BACK ) ; /* 背景色 */
EGB_paintMode( Gwork,0x02 ) ; /* 境界 */
EGB_writeMode( Gwork,OPAQUE ) ;
} else {
disptext( Gwork,Position[SW_TIME].s.x+16*XCDOT,
Position[SW_TIME].s.y+13+YCDOT-1,Textbuf ) ;
}
/*-----------------------------------------------------------------------------
** 1曲演奏時に、演奏終了する前に次の曲の頭を少し演奏してしまうことがあるの
** で、表示する際には、チェックをする必要がある.
-----------------------------------------------------------------------------*/
if ( CDDA_NOW_start == CDDA_NOW_end ) { /* 一曲演奏時 */
if ( CDDA_NOW_start != CDDA_NOW_musicno &&
Playmode != SW_PROGRAM ) {
disptimemouse( TRUE ) ;
return( FALSE ) ;
}
}
if ( CDDA_NOW_musicno == Dispno ) break ;
Dispno = CDDA_NOW_musicno ;
/*-----------------------------------------------------------------------------
** 曲番号表示
-----------------------------------------------------------------------------*/
EGB_color( Gwork,0,COLOR_TIME_MUSIC ) ; /* 前景色 */
if ( CDDA_NOW_musicno ) {
sprintf( Textbuf,"%2d",CDDA_NOW_musicno ) ;
} else {
sprintf( Textbuf,"--" ) ;
}
disptimemouse( FALSE ) ;
disptext( Gwork,Position[SW_TIME].s.x+10*XCDOT,
Position[SW_TIME].s.y+7+YCDOT-1,Textbuf ) ;
break ;
case TM_DISC_CLOCK :
case TM_DISC_TIME :
/*-----------------------------------------------------------------------------
** 1曲演奏時に、演奏終了する前に次の曲の頭を少し演奏してしまうことがあるの
** で、表示する際には、チェックをする必要がある.
-----------------------------------------------------------------------------*/
if ( CDDA_NOW_start == CDDA_NOW_end ) { /* 一曲演奏時 */
if ( CDDA_NOW_start != CDDA_NOW_musicno &&
Playmode != SW_PROGRAM ) {
disptimemouse( TRUE ) ;
return( FALSE ) ;
}
}
if ( Dispno == ZERO ) break ;
Dispno = ZERO ;
disptimemouse( FALSE ) ;
if ( no ) {
disptext( Gwork,Position[SW_TIME].s.x+10*XCDOT,
Position[SW_TIME].s.y+7+YCDOT-1," " ) ;
} else {
disptext( Gwork,Position[SW_TIME].s.x+10*XCDOT,
Position[SW_TIME].s.y+7+YCDOT-1,"--" ) ;
}
}
return( TRUE ) ;
}
/****************************** 曲時間の表示 *******************************/
void disptimeclock( void )
/*=============================================================================
** 時間表示枠内に曲時間を表示する.
**
** < INPUT > : なし
** < OUTPUT > : なし
** < RETURN > : なし
=============================================================================*/
{
int cmp ;
EGB_color( Gwork,0,COLOR_TIME ) ; /* 前景色 */
EGB_color( Gwork,1,COLOR_TIME_BACK ) ; /* 背景色 */
EGB_paintMode( Gwork,0x02 ) ; /* 境界 */
EGB_writeMode( Gwork,OPAQUE ) ;
if ( Timemode != Dispmode ) {
disptimeinfo() ;
}
switch ( Timemode ) {
/* ● 演奏中の曲内経過時間 ● */
case TM_TR_CLOCK :
if ( Flg.prgchk ) { /* プログラム確認 */
/*-----------------------------------------------------------------------------
** プログラム確認
-----------------------------------------------------------------------------*/
cmp = CDDA_cmptime( (signed char)CDDA_CLOCK_program.min,
(signed char)CDDA_CLOCK_program.sec,
ZERO,
Dispmin,Dispsec,ZERO ) ;
if ( !cmp ) break ;
Dispmin = CDDA_CLOCK_program.min ;
Dispsec = CDDA_CLOCK_program.sec ;
sprintf( Textbuf," %3d.%02d",
CDDA_CLOCK_program.min,CDDA_CLOCK_program.sec ) ;
} else { /* 通常表示 */
/*-----------------------------------------------------------------------------
** 演奏中曲時間
-----------------------------------------------------------------------------*/
cmp = CDDA_cmptime( (signed char)CDDA_CLOCK_nowtrack.min,
(signed char)CDDA_CLOCK_nowtrack.sec,
ZERO,
Dispmin,Dispsec,ZERO ) ;
if ( !cmp ) break ;
Dispmin = CDDA_CLOCK_nowtrack.min ;
Dispsec = CDDA_CLOCK_nowtrack.sec ;
sprintf( Textbuf," %3d.%02d",
CDDA_CLOCK_nowtrack.min,CDDA_CLOCK_nowtrack.sec ) ;
}
disptimemouse( FALSE ) ;
disptext( Gwork,Position[SW_TIME].s.x+8*XCDOT,
Position[SW_TIME].s.y+27+YCDOT-1,Textbuf ) ;
break ;
/* ● 演奏中の曲内残り時間 ● */
case TM_TR_TIME :
cmp = CDDA_cmptime( (signed char)CDDA_TIME_nowtrack.min,
(signed char)CDDA_TIME_nowtrack.sec,
ZERO,
Dispmin,Dispsec,ZERO ) ;
if ( !cmp ) break ;
Dispmin = CDDA_TIME_nowtrack.min ;
Dispsec = CDDA_TIME_nowtrack.sec ;
sprintf( Textbuf,"-%3d.%02d",
CDDA_TIME_nowtrack.min,CDDA_TIME_nowtrack.sec ) ;
disptimemouse( FALSE ) ;
disptext( Gwork,Position[SW_TIME].s.x+8*XCDOT,
Position[SW_TIME].s.y+27+YCDOT-1,Textbuf ) ;
break ;
/* ● ディスク内経過時間 ● */
case TM_DISC_CLOCK :
cmp = CDDA_cmptime( (signed char)CDDA_CLOCK_nowdisc.min,
(signed char)CDDA_CLOCK_nowdisc.sec,
ZERO,
Dispmin,Dispsec,ZERO ) ;
if ( !cmp ) break ;
Dispmin = CDDA_CLOCK_nowdisc.min ;
Dispsec = CDDA_CLOCK_nowdisc.sec ;
sprintf( Textbuf," %3d.%02d",
CDDA_CLOCK_nowdisc.min,CDDA_CLOCK_nowdisc.sec ) ;
disptimemouse( FALSE ) ;
disptext( Gwork,Position[SW_TIME].s.x+8*XCDOT,
Position[SW_TIME].s.y+27+YCDOT-1,Textbuf ) ;
break ;
/* ● ディスク内残り時間 ● */
case TM_DISC_TIME :
cmp = CDDA_cmptime( (signed char)CDDA_TIME_nowdisc.min,
(signed char)CDDA_TIME_nowdisc.sec,
ZERO,
Dispmin,Dispsec,ZERO ) ;
if ( !cmp ) break ;
Dispmin = CDDA_TIME_nowdisc.min ;
Dispsec = CDDA_TIME_nowdisc.sec ;
sprintf( Textbuf,"-%3d.%02d",
CDDA_TIME_nowdisc.min,CDDA_TIME_nowdisc.sec ) ;
disptimemouse( FALSE ) ;
disptext( Gwork,Position[SW_TIME].s.x+8*XCDOT,
Position[SW_TIME].s.y+27+YCDOT-1,Textbuf ) ;
}
}
/******************************* TIME表示 **********************************/
void disptime( int musicno,int mode )
/*=============================================================================
** 時間表示をする.
**
** < INPUT > : 曲番号 , 時間表示モード
** < OUTPUT > : なし
** < RETURN > : なし
=============================================================================*/
{
/*-----------------------------------------------------------------------------
** 曲番号が音楽でなく データ ならば、何もしないで リターン する.
-----------------------------------------------------------------------------*/
if ( musicno >= CDDA_INFO_buf.start && musicno <= CDDA_INFO_buf.end ) {
if ( CDDA_data_check( musicno ) ) return ;
}
/*-----------------------------------------------------------------------------
** 演奏時間の情報は、CDDA_status() をCALLすることによって取得できます.
**
** 演奏情報は、それぞれ・・・
** CDDA_NOW_status : 現在の演奏状態
**
** CDDA_NOW_musicno : 演奏中の曲番号
** CDDA_CLOCK_nowtrack : 演奏中の曲内経過時間
** CDDA_CLOCK_nowdisc : 演奏中のトータル経過時間
** CDDA_TIME_nowtrack : 演奏中の曲内残り時間
** CDDA_TIME_nowdisc : 演奏中のトータル残り時間
** となっています.
-----------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------------
** 曲番号表示
**
** プログラム設定曲確認中(一定時間保留中)は表示しない.
** 曲番号の表示チェックの結果、時間情報の表示必要なしの時は、そのままリターン.
-----------------------------------------------------------------------------*/
switch ( mode ) {
case TM_TR_CLOCK :
case TM_TR_TIME :
case TM_DISC_CLOCK :
case TM_DISC_TIME :
if ( !Flg.prgchk && Tcount2 < PRG_WAIT ) break ;
if ( !disptimemusicno( musicno ) ) return ;
break ;
case TM_NODISP :
disptimebox() ;
}
/*-----------------------------------------------------------------------------
** 曲時間表示
**
** プログラム設定曲確認中(一定時間保留中)は表示しない.
-----------------------------------------------------------------------------*/
switch ( mode ) {
case TM_TR_CLOCK :
case TM_TR_TIME :
case TM_DISC_CLOCK :
case TM_DISC_TIME :
if ( !Flg.prgchk && Tcount2 < PRG_WAIT ) break ;
disptimeclock() ;
}
/* ↓↓ ★★ DEBUG ★★ ↓↓ */
if ( CDDA_DEBUG ) {
EGB_color( Gwork,0,COLOR_TIME ) ; /* 前景色 */
EGB_color( Gwork,1,COLOR_SCREEN_BACK ) ; /* 背景色 */
EGB_paintMode( Gwork,0x02 ) ; /* 境界 */
EGB_writeMode( Gwork,OPAQUE ) ;
sprintf( Textbuf,"<%2d> %3d.%02d.%02d[-%3d.%02d.%02d] TOTAL:%3d.%02d.%02d[-%3d.%02d.%02d]",CDDA_NOW_musicno,CDDA_CLOCK_nowtrack.min,CDDA_CLOCK_nowtrack.sec,CDDA_CLOCK_nowtrack.frame,CDDA_TIME_nowtrack.min,CDDA_TIME_nowtrack.sec,CDDA_TIME_nowtrack.frame,CDDA_CLOCK_nowdisc.min,CDDA_CLOCK_nowdisc.sec,CDDA_CLOCK_nowdisc.frame,CDDA_TIME_nowdisc.min,CDDA_TIME_nowdisc.sec,CDDA_TIME_nowdisc.frame ) ;
/* メッセージ 2段目 */
disptext( Gwork,PSMsg.x,PSMsg.y+19+YCDOT-1,Textbuf ) ;
}
/* ↑↑ ★★ DEBUG ★★ ↑↑ */
/*-----------------------------------------------------------------------------
** マウス表示制御
-----------------------------------------------------------------------------*/
disptimemouse( TRUE ) ;
/*-----------------------------------------------------------------------------
** プログラムによる曲時間確認後の処理
-----------------------------------------------------------------------------*/
if ( Flg.prgchk ) {
Flg.prgchk = FALSE ;
Tcount2 = ZERO ;
} else {
/*-----------------------------------------------------------------------------
** ある程度時間がたったら、プログラム確認用のポインタをクリアしておく.
-----------------------------------------------------------------------------*/
if ( Tcount2 > PRG_WAIT ) {
CDDA_switch( CDDA_SW_PRG_TOP ) ;
}
}
}
/***************************** CHECKボタン描画 *******************************/
void dispcheck( int mode,int sw )
/*=============================================================================
** CHECK ボタン を表示する.
**
** < INPUT > : 演奏モード , スイッチ ON/OFF 状態.
** < OUTPUT > : なし
** < RETURN > : なし
**
** プログラムモード以外では、選択不可の表示とする.
=============================================================================*/
{
unsigned int p ;
if ( sw ) {
if ( Swstat[SW_CHECK] ) return ;
Swstat[SW_CHECK] = TRUE ;
} else {
if ( !Swstat[SW_CHECK] ) return ;
Swstat[SW_CHECK] = FALSE ;
}
if ( sw ) { /* スイッチ ON */
p = (unsigned int)DATA_check1 ;
} else { /* スイッチ OFF */
p = (unsigned int)DATA_check0 ;
}
EGB_paintMode( Gwork,0x02 ) ; /* 境界 */
EGB_writeMode( Gwork,PSET ) ;
put( Gwork,Position[SW_CHECK].s.x,Position[SW_CHECK].s.y,
Position[SW_CHECK].e.x,Position[SW_CHECK].e.y,p,4 ) ;
if ( mode == SW_PROGRAM ) return ;
}
/***************************** CLEARボタン描画 *******************************/
void dispclear( int mode,int sw )
/*=============================================================================
** CLEAR ボタン を表示する.
**
** < INPUT > : 演奏モード , スイッチ ON/OFF 状態.
** < OUTPUT > : なし
** < RETURN > : なし
**
** プログラムモード以外では、選択不可の表示とする.
=============================================================================*/
{
unsigned int p ;
if ( sw ) {
if ( Swstat[SW_CLEAR] ) return ;
Swstat[SW_CLEAR] = TRUE ;
} else {
if ( !Swstat[SW_CLEAR] ) return ;
Swstat[SW_CLEAR] = FALSE ;
}
if ( sw ) { /* スイッチ ON */
p = (unsigned int)DATA_clear1 ;
} else { /* スイッチ OFF */
p = (unsigned int)DATA_clear0 ;
}
EGB_paintMode( Gwork,0x02 ) ; /* 境界 */
EGB_writeMode( Gwork,PSET ) ;
put( Gwork,Position[SW_CLEAR].s.x,Position[SW_CLEAR].s.y,
Position[SW_CLEAR].e.x,Position[SW_CLEAR].e.y,p,4 ) ;
if ( mode == SW_PROGRAM ) return ;
}
/**************************** SHUFFLEボタン描画 ******************************/
void dispshuffle( int sw )
/*=============================================================================
** SHUFFLE ボタン を表示する.
**
** < INPUT > : スイッチ ON/OFF 状態.
** < OUTPUT > : なし
** < RETURN > : なし
=============================================================================*/
{
unsigned int p ;
if ( sw ) {
if ( Swstat[SW_SHUFFLE] ) return ;
Swstat[SW_SHUFFLE] = TRUE ;
} else {
if ( !Swstat[SW_SHUFFLE] ) return ;
Swstat[SW_SHUFFLE] = FALSE ;
}
if ( sw ) { /* スイッチ ON */
p = (unsigned int)DATA_shuffle1 ;
} else { /* スイッチ OFF */
p = (unsigned int)DATA_shuffle0 ;
}
EGB_paintMode( Gwork,0x02 ) ; /* 境界 */
EGB_writeMode( Gwork,PSET ) ;
put( Gwork,Position[SW_SHUFFLE].s.x,Position[SW_SHUFFLE].s.y,
Position[SW_SHUFFLE].e.x,Position[SW_SHUFFLE].e.y,p,4 ) ;
}
/**************************** REPEATボタン描画 *******************************/
void disprepeat( int sw )
/*=============================================================================
** REPEAT ボタン を表示する.
**
** < INPUT > : スイッチ ON/OFF 状態.
** < OUTPUT > : なし
** < RETURN > : なし
=============================================================================*/
{
unsigned int p ;
if ( sw ) {
if ( Swstat[SW_REPEAT] ) return ;
Swstat[SW_REPEAT] = TRUE ;
} else {
if ( !Swstat[SW_REPEAT] ) return ;
Swstat[SW_REPEAT] = FALSE ;
}
if ( sw ) { /* スイッチ ON */
p = (unsigned int)DATA_repeat1 ;
} else { /* スイッチ OFF */
p = (unsigned int)DATA_repeat0 ;
}
EGB_paintMode( Gwork,0x02 ) ; /* 境界 */
EGB_writeMode( Gwork,PSET ) ;
put( Gwork,Position[SW_REPEAT].s.x,Position[SW_REPEAT].s.y,
Position[SW_REPEAT].e.x,Position[SW_REPEAT].e.y,p,4 ) ;
}
/***************************** STOPボタン描画 ********************************/
void dispstop( int sw )
/*=============================================================================
** STOP ボタン を表示する.
**
** < INPUT > : スイッチ ON/OFF 状態.
** < OUTPUT > : なし
** < RETURN > : なし
=============================================================================*/
{
unsigned int p ;
if ( sw ) {
if ( Swstat[SW_STOP] ) return ;
Swstat[SW_STOP] = TRUE ;
} else {
if ( !Swstat[SW_STOP] ) return ;
Swstat[SW_STOP] = FALSE ;
}
if ( sw ) { /* スイッチ ON */
p = (unsigned int)DATA_stop1 ;
} else { /* スイッチ OFF */
p = (unsigned int)DATA_stop0 ;
}
EGB_paintMode( Gwork,0x02 ) ; /* 境界 */
EGB_writeMode( Gwork,PSET ) ;
put( Gwork,Position[SW_STOP].s.x,Position[SW_STOP].s.y,
Position[SW_STOP].e.x,Position[SW_STOP].e.y,p,4 ) ;
}
/***************************** PLAYボタン描画 ********************************/
void dispplay( int sw )
/*=============================================================================
** PLAY ボタン を表示する.
**
** < INPUT > : スイッチ ON/OFF 状態.
** < OUTPUT > : なし
** < RETURN > : なし
=============================================================================*/
{
unsigned int p ;
if ( sw ) {
if ( Swstat[SW_PLAY] ) return ;
Swstat[SW_PLAY] = TRUE ;
} else {
if ( !Swstat[SW_PLAY] ) return ;
Swstat[SW_PLAY] = FALSE ;
}
if ( sw ) { /* スイッチ ON */
p = (unsigned int)DATA_play1 ;
} else { /* スイッチ OFF */
p = (unsigned int)DATA_play0 ;
}
EGB_paintMode( Gwork,0x02 ) ; /* 境界 */
EGB_writeMode( Gwork,PSET ) ;
put( Gwork,Position[SW_PLAY].s.x,Position[SW_PLAY].s.y,
Position[SW_PLAY].e.x,Position[SW_PLAY].e.y,p,4 ) ;
}
/**************************** 曲戻しボタン描画 *******************************/
void disprewmusic( int sw )
/*=============================================================================
** 曲戻し ボタン を表示する.
**
** < INPUT > : スイッチ ON/OFF 状態.
** < OUTPUT > : なし
** < RETURN > : なし
=============================================================================*/
{
unsigned int p ;
if ( sw ) {
if ( Swstat[SW_REWMUSIC] ) return ;
Swstat[SW_REWMUSIC] = TRUE ;
} else {
if ( !Swstat[SW_REWMUSIC] ) return ;
Swstat[SW_REWMUSIC] = FALSE ;
}
if ( sw ) { /* スイッチ ON */
p = (unsigned int)DATA_rewmusic1 ;
} else { /* スイッチ OFF */
p = (unsigned int)DATA_rewmusic0 ;
}
EGB_paintMode( Gwork,0x02 ) ; /* 境界 */
EGB_writeMode( Gwork,PSET ) ;
put( Gwork,Position[SW_REWMUSIC].s.x,Position[SW_REWMUSIC].s.y,
Position[SW_REWMUSIC].e.x,Position[SW_REWMUSIC].e.y,p,4 ) ;
}
/*************************** 時間戻しボタン描画 ******************************/
void disprewtime( int sw )
/*=============================================================================
** 時間戻し ボタン を表示する.
**
** < INPUT > : スイッチ ON/OFF 状態.
** < OUTPUT > : なし
** < RETURN > : なし
=============================================================================*/
{
unsigned int p ;
if ( sw ) {
if ( Swstat[SW_REWTIME] ) return ;
Swstat[SW_REWTIME] = TRUE ;
} else {
if ( !Swstat[SW_REWTIME] ) return ;
Swstat[SW_REWTIME] = FALSE ;
}
if ( sw ) { /* スイッチ ON */
p = (unsigned int)DATA_rewtime1 ;
} else { /* スイッチ OFF */
p = (unsigned int)DATA_rewtime0 ;
}
EGB_paintMode( Gwork,0x02 ) ; /* 境界 */
EGB_writeMode( Gwork,PSET ) ;
put( Gwork,Position[SW_REWTIME].s.x,Position[SW_REWTIME].s.y,
Position[SW_REWTIME].e.x,Position[SW_REWTIME].e.y,p,4 ) ;
}
/***************************** PAUSEボタン描画 *******************************/
void disppause( int sw )
/*=============================================================================
** PAUSE ボタン を表示する.
**
** < INPUT > : スイッチ ON/OFF 状態.
** < OUTPUT > : なし
** < RETURN > : なし
=============================================================================*/
{
unsigned int p ;
if ( sw ) {
if ( Swstat[SW_PAUSE] ) return ;
Swstat[SW_PAUSE] = TRUE ;
} else {
if ( !Swstat[SW_PAUSE] ) return ;
Swstat[SW_PAUSE] = FALSE ;
}
if ( sw ) { /* スイッチ ON */
p = (unsigned int)DATA_pause1 ;
} else { /* スイッチ OFF */
p = (unsigned int)DATA_pause0 ;
}
EGB_paintMode( Gwork,0x02 ) ; /* 境界 */
EGB_writeMode( Gwork,PSET ) ;
put( Gwork,Position[SW_PAUSE].s.x,Position[SW_PAUSE].s.y,
Position[SW_PAUSE].e.x,Position[SW_PAUSE].e.y,p,4 ) ;
}
/*************************** 時間送りボタン描画 ******************************/
void dispfftime( int sw )
/*=============================================================================
** 時間送り ボタン を表示する.
**
** < INPUT > : スイッチ ON/OFF 状態.
** < OUTPUT > : なし
** < RETURN > : なし
=============================================================================*/
{
unsigned int p ;
if ( sw ) {
if ( Swstat[SW_FFTIME] ) return ;
Swstat[SW_FFTIME] = TRUE ;
} else {
if ( !Swstat[SW_FFTIME] ) return ;
Swstat[SW_FFTIME] = FALSE ;
}
if ( sw ) { /* スイッチ ON */
p = (unsigned int)DATA_fftime1 ;
} else { /* スイッチ OFF */
p = (unsigned int)DATA_fftime0 ;
}
EGB_paintMode( Gwork,0x02 ) ; /* 境界 */
EGB_writeMode( Gwork,PSET ) ;
put( Gwork,Position[SW_FFTIME].s.x,Position[SW_FFTIME].s.y,
Position[SW_FFTIME].e.x,Position[SW_FFTIME].e.y,p,4 ) ;
}
/**************************** 曲送りボタン描画 *******************************/
void dispffmusic( int sw )
/*=============================================================================
** 曲送り ボタン を表示する.
**
** < INPUT > : スイッチ ON/OFF 状態.
** < OUTPUT > : なし
** < RETURN > : なし
=============================================================================*/
{
unsigned int p ;
if ( sw ) {
if ( Swstat[SW_FFMUSIC] ) return ;
Swstat[SW_FFMUSIC] = TRUE ;
} else {
if ( !Swstat[SW_FFMUSIC] ) return ;
Swstat[SW_FFMUSIC] = FALSE ;
}
if ( sw ) { /* スイッチ ON */
p = (unsigned int)DATA_ffmusic1 ;
} else { /* スイッチ OFF */
p = (unsigned int)DATA_ffmusic0 ;
}
EGB_paintMode( Gwork,0x02 ) ; /* 境界 */
EGB_writeMode( Gwork,PSET ) ;
put( Gwork,Position[SW_FFMUSIC].s.x,Position[SW_FFMUSIC].s.y,
Position[SW_FFMUSIC].e.x,Position[SW_FFMUSIC].e.y,p,4 ) ;
}
/**************************** PROGRAMボタン描画 ******************************/
void dispprogram( int sw )
/*=============================================================================
** PROGRAMモード ボタン を表示する.
**
** < INPUT > : スイッチ ON/OFF 状態.
** < OUTPUT > : なし
** < RETURN > : なし
**
** 他の演奏モードとの排他表示をする必要があります.
=============================================================================*/
{
unsigned int p ;
if ( sw ) {
if ( Swstat[SW_PROGRAM] ) return ;
Swstat[SW_PROGRAM] = TRUE ;
} else {
if ( !Swstat[SW_PROGRAM] ) return ;
Swstat[SW_PROGRAM] = FALSE ;
}
if ( sw ) { /* スイッチ ON */
p = (unsigned int)DATA_mode1 ;
EGB_color( Gwork,2,COLOR_MODE_PROGRAM ) ; /* 面塗り色 */
} else { /* スイッチ OFF */
p = (unsigned int)DATA_mode0 ;
}
EGB_paintMode( Gwork,0x02 ) ; /* 境界 */
EGB_writeMode( Gwork,PSET ) ;
put( Gwork,Position[SW_PROGRAM].s.x,Position[SW_PROGRAM].s.y,
Position[SW_PROGRAM].e.x,Position[SW_PROGRAM].e.y,p,4 ) ;
if ( sw ) {
EGB_paintMode( Gwork,0x20 ) ; /* 面塗り */
box( Gwork,Position[SW_PROGRAM].s.x+1,Position[SW_PROGRAM].s.y+1,
Position[SW_PROGRAM].e.x-1,Position[SW_PROGRAM].e.y-1 ) ;
}
}
/**************************** SINGLEボタン描画 *******************************/
void dispsingle( int sw )
/*=============================================================================
** SINGLEモード ボタン を表示する.
**
** < INPUT > : スイッチ ON/OFF 状態.
** < OUTPUT > : なし
** < RETURN > : なし
**
** 他の演奏モードとの排他表示をする必要があります.
=============================================================================*/
{
unsigned int p ;
if ( sw ) {
if ( Swstat[SW_SINGLE] ) return ;
Swstat[SW_SINGLE] = TRUE ;
} else {
if ( !Swstat[SW_SINGLE] ) return ;
Swstat[SW_SINGLE] = FALSE ;
}
if ( sw ) { /* スイッチ ON */
p = (unsigned int)DATA_mode1 ;
EGB_color( Gwork,2,COLOR_MODE_SINGLE ) ; /* 面塗り色 */
} else { /* スイッチ OFF */
p = (unsigned int)DATA_mode0 ;
}
EGB_paintMode( Gwork,0x02 ) ; /* 境界 */
EGB_writeMode( Gwork,PSET ) ;
put( Gwork,Position[SW_SINGLE].s.x,Position[SW_SINGLE].s.y,
Position[SW_SINGLE].e.x,Position[SW_SINGLE].e.y,p,4 ) ;
if ( sw ) {
EGB_paintMode( Gwork,0x20 ) ; /* 面塗り */
box( Gwork,Position[SW_SINGLE].s.x+1,Position[SW_SINGLE].s.y+1,
Position[SW_SINGLE].e.x-1,Position[SW_SINGLE].e.y-1 ) ;
}
}
/**************************** CONTINUEボタン描画 *****************************/
void dispcontinue( int sw )
/*=============================================================================
** CONTINUEモード ボタン を表示する.
**
** < INPUT > : スイッチ ON/OFF 状態.
** < OUTPUT > : なし
** < RETURN > : なし
**
** 他の演奏モードとの排他表示をする必要があります.
=============================================================================*/
{
unsigned int p ;
if ( sw ) {
if ( Swstat[SW_CONTINUE] ) return ;
Swstat[SW_CONTINUE] = TRUE ;
} else {
if ( !Swstat[SW_CONTINUE] ) return ;
Swstat[SW_CONTINUE] = FALSE ;
}
if ( sw ) { /* スイッチ ON */
p = (unsigned int)DATA_mode1 ;
EGB_color( Gwork,2,COLOR_MODE_CONTINUE ) ; /* 面塗り色 */
} else { /* スイッチ OFF */
p = (unsigned int)DATA_mode0 ;
}
EGB_paintMode( Gwork,0x02 ) ; /* 境界 */
EGB_writeMode( Gwork,PSET ) ;
put( Gwork,Position[SW_CONTINUE].s.x,Position[SW_CONTINUE].s.y,
Position[SW_CONTINUE].e.x,Position[SW_CONTINUE].e.y,p,4 ) ;
if ( sw ) {
EGB_paintMode( Gwork,0x20 ) ; /* 面塗り */
box( Gwork,Position[SW_CONTINUE].s.x+1,Position[SW_CONTINUE].s.y+1,
Position[SW_CONTINUE].e.x-1,Position[SW_CONTINUE].e.y-1 ) ;
}
}
/*************************** 電子ボリューム BOX 描画 ***************************/
void dispelevolbox( int sw )
/*=============================================================================
** 電子ボリューム BOX を表示する.
**
** < INPUT > : スイッチ ON/OFF 状態.
** < OUTPUT > : なし
** < RETURN > : なし
=============================================================================*/
{
unsigned int p ;
if ( sw ) {
if ( Swstat[SW_ELEVOL] ) return ;
Swstat[SW_ELEVOL] = TRUE ;
} else {
if ( !Swstat[SW_ELEVOL] ) return ;
Swstat[SW_ELEVOL] = FALSE ;
}
if ( sw ) { /* スイッチ ON */
p = (unsigned int)DATA_elevol ;
} else { /* スイッチ OFF */
p = (unsigned int)DATA_elevol ;
}
EGB_paintMode( Gwork,0x02 ) ; /* 境界 */
EGB_writeMode( Gwork,PSET ) ;
put( Gwork,Position[SW_ELEVOL].s.x,Position[SW_ELEVOL].s.y,
Position[SW_ELEVOL].e.x,Position[SW_ELEVOL].e.y,p,4 ) ;
}
/***************************** 電子ボリューム表示 ******************************/
void dispelevol( void )
/*=============================================================================
** 電子ボリュームのレベル表示をする.
**
** < INPUT > : なし
** < OUTPUT > : なし
** < RETURN > : なし
=============================================================================*/
{
static int vol = ZERO ;
int c ;
int ps, pe ;
EGB_paintMode( Gwork,0x20 ) ; /* 面塗り */
EGB_writeMode( Gwork,PSET ) ;
/*-----------------------------------------------------------------------------
** 現在の表示状態との差分を表示する.
** ただし、電子ボリュームの値が MAX / MIN / MUTE の時 が 絡んだ場合には、
** 表示し直す.
-----------------------------------------------------------------------------*/
if ( Flg.mute ) { /* ミュート中 */
/*-----------------------------------------------------------------------------
** => MUTE 表示
** MUTE 表示中は、vol = -1 としておく.
-----------------------------------------------------------------------------*/
EGB_color( Gwork,2,COLOR_EVOL_MUTE ) ; /* 面塗り色 */
box( Gwork,Position[SW_ELEVOL].s.x+1,Position[SW_ELEVOL].s.y+1,
Position[SW_ELEVOL].e.x-1,Position[SW_ELEVOL].e.y-1 ) ;
vol = -1 ;
} else {
/*-----------------------------------------------------------------------------
** 現在の表示状態と変化なければ、何もしない.
-----------------------------------------------------------------------------*/
if ( vol == Evol ) return ;
/*-----------------------------------------------------------------------------
** => MAX / MIN 表示
-----------------------------------------------------------------------------*/
if ( Evol >= ELEVOL_MAX ) { /* 電子ボリュームがMAX */
EGB_color( Gwork,2,COLOR_EVOL_MAX ) ; /* 面塗り色 */
box( Gwork,Position[SW_ELEVOL].s.x+1,Position[SW_ELEVOL].s.y+1,
Position[SW_ELEVOL].e.x-1,Position[SW_ELEVOL].e.y-1 ) ;
} else if ( Evol <= ELEVOL_MIN ) { /* 電子ボリュームがMIN */
EGB_color( Gwork,2,COLOR_EVOL_MIN ) ; /* 面塗り色 */
box( Gwork,Position[SW_ELEVOL].s.x+1,Position[SW_ELEVOL].s.y+1,
Position[SW_ELEVOL].e.x-1,Position[SW_ELEVOL].e.y-1 ) ;
} else { /* 可変中 */ if ( vol >= ELEVOL_MAX || vol <= ELEVOL_MIN || vol == -1 ) {
/*-----------------------------------------------------------------------------
** MAX / MIN / MUTE 表示中 => 現在のボリュームを表示
-----------------------------------------------------------------------------*/
EGB_color( Gwork,2,COLOR_EVOL_BACK ) ; /* 面塗り色 */
box( Gwork,Position[SW_ELEVOL].s.x+1,Position[SW_ELEVOL].s.y+1,
Position[SW_ELEVOL].e.x-1,Position[SW_ELEVOL].e.y-1 ) ;
EGB_color( Gwork,2,COLOR_EVOL ) ; /* 面塗り色 */
if ( Evol > 7 ) {
for ( c=0; c<29; c++ ) {
if ( (Evol-8) / 4 >= c ) {
box( Gwork,Position[SW_ELEVOL].s.x+1+c*3,
Position[SW_ELEVOL].s.y+1,
Position[SW_ELEVOL].s.x+2+c*3,
Position[SW_ELEVOL].e.y-1 ) ;
}
}
}
} else {
/*-----------------------------------------------------------------------------
** 可変表示中 => 差分を表示
-----------------------------------------------------------------------------*/
if ( Evol < vol ) {
EGB_color( Gwork,2,COLOR_EVOL_BACK ) ; /* 面塗り色 */
if ( Evol < 8 ) {
ps = ZERO ;
} else {
ps = ( Evol - 8 ) / 4 * 3 ;
}
pe = ( vol - 8 ) / 4 * 3 ;
c = Position[SW_ELEVOL].e.x - Position[SW_ELEVOL].s.x ;
if ( pe + 3 > c ) pe = c - 3 ;
box( Gwork,Position[SW_ELEVOL].s.x+1+ps,
Position[SW_ELEVOL].s.y+1,
Position[SW_ELEVOL].s.x+2+pe,
Position[SW_ELEVOL].e.y-1 ) ;
} else {
EGB_color( Gwork,2,COLOR_EVOL ) ; /* 面塗り色 */
if ( Evol > 7 ) {
pe = ( vol - 8 ) / 4 ;
if ( pe < ZERO ) pe = ZERO ;
for ( c=pe; c<29; c++ ) {
if ( (Evol-8) / 4 >= c ) {
box( Gwork,Position[SW_ELEVOL].s.x+1+c*3,
Position[SW_ELEVOL].s.y+1,
Position[SW_ELEVOL].s.x+2+c*3,
Position[SW_ELEVOL].e.y-1 ) ;
}
}
}
}
}
}
vol = Evol ;
}
}
/***************************** スイッチボタン描画 ********************************/
void dispword( void )
/*=============================================================================
** 各種ボタン を表示する.
**
** < INPUT > : なし
** < OUTPUT > : なし
** < RETURN > : なし
=============================================================================*/
{
unsigned int p ;
EGB_color( Gwork,0,COLOR_SWITCH_WORD ) ;
EGB_paintMode( Gwork,0x02 ) ; /* 境界 */
EGB_writeMode( Gwork,PSET ) ;
p = (unsigned int)WORD_exit ;
put( Gwork,Position[SW_EXIT].s.x+1,Position[SW_EXIT].e.y+3,
Position[SW_EXIT].e.x+1,Position[SW_EXIT].e.y+3+6,p,1 ) ;
p = (unsigned int)WORD_program ;
put( Gwork,Position[SW_PROGRAM].s.x,Position[SW_PROGRAM].e.y+3,
Position[SW_PROGRAM].e.x,Position[SW_PROGRAM].e.y+3+6,p,1 ) ;
p = (unsigned int)WORD_single ;
put( Gwork,Position[SW_SINGLE].s.x,Position[SW_SINGLE].e.y+3,
Position[SW_SINGLE].e.x,Position[SW_SINGLE].e.y+3+6,p,1 ) ;
p = (unsigned int)WORD_continue ;
put( Gwork,Position[SW_CONTINUE].s.x,Position[SW_CONTINUE].e.y+3,
Position[SW_CONTINUE].e.x,Position[SW_CONTINUE].e.y+3+6,p,1 ) ;
}
/***************************** スイッチボタン描画 ********************************/
void dispswitch( void )
/*=============================================================================
** 各種ボタン を表示する.
**
** < INPUT > : なし
** < OUTPUT > : なし
** < RETURN > : なし
=============================================================================*/
{
dispexit( FALSE ) ;
disptime( ZERO,TM_NODISP ) ;
dispcheck( SW_CONTINUE,FALSE ) ;
dispclear( SW_CONTINUE,FALSE ) ;
dispshuffle( FALSE ) ;
disprepeat( FALSE ) ;
dispstop( FALSE ) ;
dispplay( FALSE ) ;
disprewmusic( FALSE ) ;
disprewtime( FALSE ) ;
disppause( FALSE ) ;
dispfftime( FALSE ) ;
dispffmusic( FALSE ) ;
dispprogram( FALSE ) ;
dispsingle( FALSE ) ;
Swstat[SW_CONTINUE] = FALSE ;
dispcontinue( TRUE ) ;
dispword() ;
dispelevolbox( FALSE ) ;
dispelevol() ;
}
/***************************** 曲情報の選択表示 ****************************/
void dispselectmusicno( int no )
/*=============================================================================
** 指定された曲番号の情報を XOR 表示する.
**
** < INPUT > : 曲番号
** < OUTPUT > : なし
** < RETURN > : なし
**
** この関数を 2回 CALL すれば、元の表示状態に戻ります.
=============================================================================*/
{
int xs, ys ;
char msw ;
if ( no ) {
if ( CDDA_NOW_status == CDDA_STAT_NOTREADY ) return ;
if ( ( CDDA_INFO_buf.start > no || no > CDDA_INFO_buf.end ) &&
no != SW_TOTAL ) return ;
if ( no < 1 ) return ;
if ( no == XORno ) return ;
} else {
if ( !XORno ) return ;
}
msw = Flg.mouse ;
if ( msw ) dispmouse( FALSE ) ;
EGB_writeMode( Gwork,XOR ) ;
EGB_color( Gwork,2,COLOR_XOR ) ; /* 面塗り色 */
EGB_paintMode( Gwork,0x20 ) ; /* 面塗り */
if ( XORno ) {
xs = PSInf.x + ((XORno-1)/20)*121 + 1 ;
ys = (PSInf.y+YCDOT+1) + ((XORno-1)%20)*(YCDOT+1) + 1 ;
box( Gwork,xs,ys,xs+119,ys+YCDOT-1 ) ;
}
if ( no ) {
xs = PSInf.x + ((no-1)/20)*121 + 1 ;
ys = (PSInf.y+YCDOT+1) + ((no-1)%20)*(YCDOT+1) + 1 ;
box( Gwork,xs,ys,xs+119,ys+YCDOT-1 ) ;
}
if ( msw ) dispmouse( TRUE ) ;
XORno = no ;
}
/******************************* 曲情報の表示 ******************************/
void dispmusicno( int no,int sw )
/*=============================================================================
** 指定された曲番号の情報を表示する.
**
** < INPUT > : 曲番号
** : スイッチが 真値 ならば演奏前の色で、偽値 ならば演奏後の色で表示.
** < OUTPUT > : なし
** < RETURN > : なし
=============================================================================*/
{
int xs, ys ;
if ( CDDA_NOW_status == CDDA_STAT_NOTREADY ) return ;
if ( ( CDDA_INFO_buf.start > no || no > CDDA_INFO_buf.end ) &&
no != SW_TOTAL ) return ;
if ( no < 1 ) return ;
if ( no != SW_TOTAL ) {
if ( Infstat[no-1] && sw ) return ;
if ( !Infstat[no-1] && !sw ) return ;
Infstat[no-1] = sw ;
}
dispselectmusicno( ZERO ) ;
EGB_paintMode( Gwork,0x02 ) ; /* 境界 */
EGB_writeMode( Gwork,OPAQUE ) ;
xs = PSInf.x + ((no-1)/20)*121 + 1 ;
ys = (PSInf.y+YCDOT+1) + ((no-1)%20)*(YCDOT+1) + 1 ;
if ( sw ) { /* 選択された時の表示 */
EGB_color( Gwork,0,COLOR_INFO_ON ) ; /* 前景色 */
} else { /* 演奏済表示 */
EGB_color( Gwork,0,COLOR_INFO_OFF ) ; /* 前景色 */
}
if ( CDDA_data_check( no ) ) { /* データ */
EGB_color( Gwork,0,COLOR_INFO_DATA ) ;
}
EGB_color( Gwork,1,COLOR_INFO_BACK ) ; /* 背景色 */
if ( no == SW_TOTAL ) {
EGB_color( Gwork,0,COLOR_INFO_TOTAL ) ;
sprintf( Textbuf," ★ %2d分%02d秒%02d ",
CDDA_TIME_music.min,
CDDA_TIME_music.sec,
CDDA_TIME_music.frame ) ;
} else {
sprintf( Textbuf," %02d %2d分%02d秒%02d ",
no,CDDA_TIME_track[no-1].min,
CDDA_TIME_track[no-1].sec,
CDDA_TIME_track[no-1].frame ) ;
}
disptext( Gwork,xs,ys+YCDOT-1,Textbuf ) ;
}
/************************* イベント選択時の表示チェック ***************************/
void dispswitch_check( int swno )
/*=============================================================================
** スイッチ表示の排他チェックをする.(他のスイッチを消す)
**
** < INPUT > : スイッチ番号
** < OUTPUT > : なし
** < RETURN > : なし
=============================================================================*/
{
switch ( swno ) {
case SW_EXIT :
dispplay( FALSE ) ;
disppause( FALSE ) ;
disptime( ZERO,TM_NODISP ) ;
break ;
case SW_TIME :
case SW_CHECK :
case SW_CLEAR :
break ;
case SW_SHUFFLE :
disptime( ZERO,TM_NODISP ) ;
break ;
case SW_REPEAT :
break ;
case SW_STOP :
disptime( ZERO,TM_NODISP ) ;
dispshuffle( FALSE ) ;
dispplay( FALSE ) ;
disppause( FALSE ) ;
break ;
case SW_PLAY :
disppause( FALSE ) ;
if ( !Flg.shuffle ) dispshuffle( FALSE ) ;
break ;
case SW_REWMUSIC :
break ;
case SW_REWTIME :
break ;
case SW_PAUSE :
break ;
case SW_FFTIME :
break ;
case SW_FFMUSIC :
break ;
case SW_PROGRAM :
dispsingle( FALSE ) ;
dispcontinue( FALSE ) ;
dispcheck( SW_PROGRAM,FALSE ) ;
dispclear( SW_PROGRAM,FALSE ) ;
break ;
case SW_SINGLE :
dispprogram( FALSE ) ;
dispcontinue( FALSE ) ;
dispcheck( SW_SINGLE,FALSE ) ;
dispclear( SW_SINGLE,FALSE ) ;
break ;
case SW_CONTINUE :
dispprogram( FALSE ) ;
dispsingle( FALSE ) ;
dispcheck( SW_CONTINUE,FALSE ) ;
dispclear( SW_CONTINUE,FALSE ) ;
}
}
/*************************** イベント選択時の表示 *****************************/
void dispevent( int no,int sw )
/*=============================================================================
** マウスがクリックされた時に対応するイベントをチェックする.
**
** < INPUT > : イベント番号(SWVAL+スイッチ番号) or 曲番号
** : ON(真値) か OFF(偽値) => 曲番号の場合は演奏済でないか?
** < OUTPUT > : なし
** < RETURN > : なし
=============================================================================*/
{
int c ;
if ( no >= SWVAL ) {
/*
** スイッチ
*/
if ( sw ) dispswitch_check( no-SWVAL ) ;
switch ( no-SWVAL ) {
case SW_EXIT :
dispexit( sw ) ;
break ;
case SW_TIME :
break ;
case SW_CHECK :
dispcheck( Playmode,sw ) ;
break ;
case SW_CLEAR :
dispclear( Playmode,sw ) ;
break ;
case SW_SHUFFLE :
dispshuffle( sw ) ;
break ;
case SW_REPEAT :
disprepeat( sw ) ;
break ;
case SW_STOP :
dispstop( sw ) ;
break ;
case SW_PLAY :
dispplay( sw ) ;
break ;
case SW_REWMUSIC :
disprewmusic( sw ) ;
break ;
case SW_REWTIME :
disprewtime( sw ) ;
break ;
case SW_PAUSE :
disppause( sw ) ;
break ;
case SW_FFTIME :
dispfftime( sw ) ;
break ;
case SW_FFMUSIC :
dispffmusic( sw ) ;
break ;
case SW_PROGRAM :
Swstat[SW_CHECK] = TRUE ;
Swstat[SW_CLEAR] = TRUE ;
dispswitch_check( SW_PROGRAM ) ;
dispprogram( TRUE ) ;
break ;
case SW_SINGLE :
Swstat[SW_CHECK] = TRUE ;
Swstat[SW_CLEAR] = TRUE ;
dispswitch_check( SW_SINGLE ) ;
dispsingle( TRUE ) ;
break ;
case SW_CONTINUE :
Swstat[SW_CHECK] = TRUE ;
Swstat[SW_CLEAR] = TRUE ;
dispswitch_check( SW_CONTINUE ) ;
dispcontinue( TRUE ) ;
break ;
case SW_ELEVOL :
if ( Mosx < Position[SW_ELEVOL].s.x ) { /* MIN */
Evol = ELEVOL_MIN ;
} else if ( Mosx > Position[SW_ELEVOL].e.x ) { /* MAX */
Evol = ELEVOL_MAX ;
} else { /* VAL */
c = ( Mosx - Position[SW_ELEVOL].s.x ) / 3 ;
Evol = ( c + 2 ) * 4 ;
}
dispelevol() ;
}
} else {
/*
** 曲情報
*/
if ( sw ) { /* 選択された時の表示 */
dispselectmusicno( no ) ;
} else { /* 演奏済表示 */
dispmusicno( no,FALSE ) ;
}
}
}
/******************************* TOC 情報クリア ******************************/
void disptocclear( void )
/*=============================================================================
** 曲情報表示領域をクリアする.
**
** < INPUT > : なし
** < OUTPUT > : なし
** < RETURN > : なし
=============================================================================*/
{
int c ;
Flg_disptoc = FALSE ;
/*-----------------------------------------------------------------------------
** BOX 描画 ( TITLE 部分を除く )
-----------------------------------------------------------------------------*/
EGB_color( Gwork,0,COLOR_INFO_BOX0 ) ; /* 前景色 */
EGB_color( Gwork,2,COLOR_INFO_BACK ) ; /* 面塗り色 */
EGB_paintMode( Gwork,0x22 ) ; /* 面塗り */
EGB_writeMode( Gwork,PSET ) ;
box( Gwork,PSInf.x,PSInf.y+YCDOT+1,
PSInf.x+SZInf.x-1,PSInf.y+SZInf.y-1 ) ;
EGB_paintMode( Gwork,0x02 ) ; /* 境界 */
EGB_color( Gwork,0,COLOR_INFO_BOX1 ) ; /* 前景色 */
line( Gwork,PSInf.x,PSInf.y+SZInf.y-2, /* 縦線 */
PSInf.x,PSInf.y ) ;
XORno = ZERO ;
/*-----------------------------------------------------------------------------
** LINE 描画
-----------------------------------------------------------------------------*/
EGB_color( Gwork,0,COLOR_INFO_BOX0 ) ; /* 前景色 */
for ( c=1; c<5; c++ ) { /* 縦線 */
line( Gwork,PSInf.x+c*121,PSInf.y,
PSInf.x+c*121,PSInf.y+SZInf.y-1 ) ;
}
for ( c=1; c<21; c++ ) { /* 横線 */
line( Gwork,PSInf.x,PSInf.y+c*(YCDOT+1),
PSInf.x+SZInf.x-1,PSInf.y+c*(YCDOT+1) ) ;
}
/*-----------------------------------------------------------------------------
** 曲情報表示 フラグ クリア
-----------------------------------------------------------------------------*/
for ( c=0; c<CDDA_MAX_TRACK; c++ ) Infstat[c] = FALSE ;
}
/******************************* TOC 情報表示 *****************************/
void disptoc( char sw )
/*=============================================================================
** 曲情報を表示する.
**
** < INPUT > : sw 真値 ならば、曲情報表示領域をクリアしてから曲情報を表示する.
** sw 偽値 ならば、曲情報表示領域をクリアしないで曲情報を表示する.
** < OUTPUT > : なし
** < RETURN > : なし
=============================================================================*/
{
static char initflg = FALSE ;
int c, cc ;
int no ;
/*-----------------------------------------------------------------------------
** TOC 情報は、CDDA_INFO_buf. に格納されています.
**
** 他の時間情報は、それぞれ・・・
** CDDA_INFO_buf.discend : 全時間
** CDDA_INFO_buf.track[0] : TOC 時間(TOC情報格納部分)
** CDDA_TIME_music : 全演奏時間
** CDDA_TIME_data : 全データ時間
** 注意 : 全時間は、TOC時間 + 全データ時間 + 全演奏時間 + 1フレーム となります.
** CDDA_TIME_track[] : 各トラックの演奏(データ)時間
** となっています.
**
** トラック内がデータなのか音楽なのかは、次の方法で確認できます.
** (1) CDDA_INFO_buf.track[] に格納されている時間の再上位ビットがON/OFFで確認.
** ON ならば データ , OFFならば 音楽 です.
** (2) CDDA_datacheck(曲番号 1~99) をCALLし、そのリターン値で確認.
** リターン値が 真 ならば データ , 偽 ならば 音楽 です.
-----------------------------------------------------------------------------*/
if ( !initflg ) {
initflg = TRUE ;
/*-----------------------------------------------------------------------------
** BOX 描画
-----------------------------------------------------------------------------*/
EGB_color( Gwork,0,COLOR_INFO_BOX0 ) ; /* 前景色 */
EGB_color( Gwork,2,COLOR_INFO_BACK ) ; /* 面塗り色 */
EGB_paintMode( Gwork,0x22 ) ; /* 面塗り */
EGB_writeMode( Gwork,PSET ) ;
box( Gwork,PSInf.x,PSInf.y-1,PSInf.x+SZInf.x-1,PSInf.y+SZInf.y-1 ) ;
EGB_paintMode( Gwork,0x02 ) ; /* 境界 */
EGB_color( Gwork,0,COLOR_INFO_BOX1 ) ; /* 前景色 */
line( Gwork,PSInf.x,PSInf.y+SZInf.y-2, /* 縦線 */
PSInf.x,PSInf.y ) ;
line( Gwork,PSInf.x,PSInf.y-1, /* 横線 */
PSInf.x+SZInf.x-1,PSInf.y-1 ) ;
XORno = ZERO ;
/*-----------------------------------------------------------------------------
** LINE 描画
-----------------------------------------------------------------------------*/
EGB_color( Gwork,0,COLOR_INFO_BOX0 ) ; /* 前景色 */
for ( c=1; c<5; c++ ) { /* 縦線 */
line( Gwork,PSInf.x+c*121,PSInf.y-1,
PSInf.x+c*121,PSInf.y+SZInf.y-1 ) ;
}
for ( c=1; c<21; c++ ) { /* 横線 */
line( Gwork,PSInf.x,PSInf.y+c*(YCDOT+1),
PSInf.x+SZInf.x-1,PSInf.y+c*(YCDOT+1) ) ;
}
/*-----------------------------------------------------------------------------
** TITLE 描画
-----------------------------------------------------------------------------*/
EGB_color( Gwork,0,COLOR_INFO_TITLE ) ; /* 前景色 */
for ( c=0; c<5; c++ ) {
disptext( Gwork,PSInf.x+c*121+1,PSInf.y+YCDOT," No ・・・TIME・・・ " ) ;
}
} else {
if ( sw ) disptocclear() ;
}
/*-----------------------------------------------------------------------------
** 曲情報 描画
-----------------------------------------------------------------------------*/
if ( CDDA_NOW_status == CDDA_STAT_NOTREADY ) return ;
EGB_paintMode( Gwork,0x02 ) ; /* 境界 */
EGB_writeMode( Gwork,PSET ) ;
EGB_color( Gwork,1,COLOR_INFO_BACK ) ; /* 背景色 */
for ( c=1; c<21; c++ ) {
for ( cc=0; cc<5; cc++ ) {
no = c + cc*20 ;
if ( no <= CDDA_INFO_buf.end ) {
sprintf( Textbuf," %02d %2d分%02d秒%02d ",
no,CDDA_TIME_track[no-1].min,
CDDA_TIME_track[no-1].sec,
CDDA_TIME_track[no-1].frame ) ;
if ( CDDA_data_check( no ) ) {
EGB_color( Gwork,0,COLOR_INFO_DATA ) ; /* データ */
} else {
EGB_color( Gwork,0,COLOR_INFO_ON ) ; /* 音楽 */
}
if ( sw || !Infstat[no-1] ) {
if ( no == XORno ) {
dispselectmusicno( ZERO ) ;
EGB_paintMode( Gwork,0x02 ) ;
EGB_writeMode( Gwork,PSET ) ;
}
disptext( Gwork,PSInf.x+cc*121+1,PSInf.y+c*(YCDOT+1)+YCDOT,
Textbuf ) ;
}
Infstat[no-1] = TRUE ;
}
}
}
Flg_disptoc = TRUE ;
/*-----------------------------------------------------------------------------
** TOTAL TIME 描画
-----------------------------------------------------------------------------*/
dispmusicno( SW_TOTAL,DUMMY ) ;
}
/******************************* TOC 情報表示 *****************************/
void disptocmode( int mode,int musicno )
/*=============================================================================
** 演奏モード変更時の曲情報表示
**
** < INPUT > : 演奏モード , 演奏曲番号
** < OUTPUT > : なし
** < RETURN > : なし
=============================================================================*/
{
int c, cc ;
int no ;
char flg ;
/*-----------------------------------------------------------------------------
** TOC 情報は、CDDA_INFO_buf. に格納されています.
**
** 他の時間情報は、それぞれ・・・
** CDDA_INFO_buf.discend : 全時間
** CDDA_INFO_buf.track[0] : TOC 時間(TOC情報格納部分)
** CDDA_TIME_music : 全演奏時間
** CDDA_TIME_data : 全データ時間
** 注意 : 全時間は、TOC時間 + 全データ時間 + 全演奏時間 + 1フレーム となります.
** CDDA_TIME_track[] : 各トラックの演奏(データ)時間
** となっています.
**
** トラック内がデータなのか音楽なのかは、次の方法で確認できます.
** (1) CDDA_INFO_buf.track[] に格納されている時間の再上位ビットがON/OFFで確認.
** ON ならば データ , OFFならば 音楽 です.
** (2) CDDA_datacheck(曲番号 1~99) をCALLし、そのリターン値で確認.
** リターン値が 真 ならば データ , 偽 ならば 音楽 です.
-----------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------------
** 曲情報 描画
-----------------------------------------------------------------------------*/
EGB_paintMode( Gwork,0x02 ) ; /* 境界 */
EGB_writeMode( Gwork,OPAQUE ) ;
EGB_color( Gwork,1,COLOR_INFO_BACK ) ; /* 背景色 */
for ( c=1; c<21; c++ ) {
for ( cc=0; cc<5; cc++ ) {
no = c + cc*20 ;
if ( no <= CDDA_INFO_buf.end &&
CDDA_NOW_status != CDDA_STAT_NOTREADY ) {
sprintf( Textbuf," %02d %2d分%02d秒%02d ",
no,CDDA_TIME_track[no-1].min,
CDDA_TIME_track[no-1].sec,
CDDA_TIME_track[no-1].frame ) ;
if ( CDDA_data_check( no ) ) {
flg = TRUE ;
EGB_color( Gwork,0,COLOR_INFO_DATA ) ; /* データ */
} else {
switch ( mode ) {
case SW_PROGRAM :
if ( Prginf[no-1] ) {
/* ↓↓ ★★ DEBUG ★★ ↓↓ */
if ( CDDA_DEBUG ) {
if ( Prginf[no-1] < 0 ) {
printf( "<disptoc2> " ) ;
printf( "musicno = %d",no ) ;
printf( " , Prginf = %d\n",Prginf[no-1]) ;
}
}
/* ↑↑ ★★ DEBUG ★★ ↑↑ */
flg = TRUE ;
EGB_color( Gwork,0,COLOR_INFO_ON ) ;
} else {
flg = FALSE ;
EGB_color( Gwork,0,COLOR_INFO_OFF ) ;
}
break ;
case SW_SINGLE :
if ( no == musicno ) {
flg = TRUE ;
EGB_color( Gwork,0,COLOR_INFO_ON ) ;
} else {
flg = FALSE ;
EGB_color( Gwork,0,COLOR_INFO_OFF ) ;
}
break ;
case SW_CONTINUE :
if ( no < musicno ) {
flg = FALSE ;
EGB_color( Gwork,0,COLOR_INFO_OFF ) ;
} else {
flg = TRUE ;
EGB_color( Gwork,0,COLOR_INFO_ON ) ;
}
}
}
if ( (Infstat[no-1] && !flg) || (!Infstat[no-1] && flg ) ||
!Flg_disptoc ) {
if ( no == XORno ) {
dispselectmusicno( ZERO ) ;
EGB_paintMode( Gwork,0x02 ) ;
EGB_writeMode( Gwork,OPAQUE ) ;
}
disptext( Gwork,PSInf.x+cc*121+1,PSInf.y+c*(YCDOT+1)+YCDOT,
Textbuf ) ;
}
Infstat[no-1] = flg ;
}
}
}
Flg_disptoc = TRUE ;
/*-----------------------------------------------------------------------------
** TOTAL TIME 描画
-----------------------------------------------------------------------------*/
dispmusicno( SW_TOTAL,DUMMY ) ;
}